package com.isman.jackson.hibernate4;

import java.lang.annotation.Annotation;

import javax.persistence.Transient;

import com.google.appengine.repackaged.org.codehaus.jackson.Version;
import com.google.appengine.repackaged.org.codehaus.jackson.map.AnnotationIntrospector;
import com.google.appengine.repackaged.org.codehaus.jackson.map.JsonDeserializer;
import com.google.appengine.repackaged.org.codehaus.jackson.map.KeyDeserializer;
import com.google.appengine.repackaged.org.codehaus.jackson.map.annotate.JsonSerialize.Typing;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.Annotated;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedClass;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedConstructor;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedField;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedMember;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedMethod;
import com.google.appengine.repackaged.org.codehaus.jackson.map.introspect.AnnotatedParameter;
import com.google.appengine.repackaged.org.codehaus.jackson.type.JavaType;

/**
 * Simple {@link AnnotationIntrospector} that adds support for using
 * {@link Transient} to denote ignorable fields (alongside with Jackson and/or
 * JAXB annotations).
 */
public class HibernateAnnotationIntrospector extends AnnotationIntrospector {
	private static final long serialVersionUID = 1L;

	/**
	 * Whether we should check for existence of @Transient or not. Default value
	 * is 'true'.
	 */
	protected boolean _cfgCheckTransient;

	/*
	 * /**********************************************************************
	 * /* Construction, configuration
	 * /**********************************************************************
	 */

	public HibernateAnnotationIntrospector() {
	}

	/**
	 * Method to call to specify whether @Transient annotation is to be
	 * supported; if false, will be ignored, if true, will be used to detect
	 * "ignorable" properties.
	 */
	public HibernateAnnotationIntrospector setUseTransient(boolean state) {
		_cfgCheckTransient = state;
		return this;
	}
	@Override
	public boolean hasIgnoreMarker(AnnotatedMember m) {
		return _cfgCheckTransient && m.hasAnnotation(Transient.class);
	}

	@Override
	public boolean isHandled(Annotation ann) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String findRootName(AnnotatedClass ac) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String[] findPropertiesToIgnore(AnnotatedClass ac) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean findIgnoreUnknownProperties(AnnotatedClass ac) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean isIgnorableMethod(AnnotatedMethod m) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isIgnorableConstructor(AnnotatedConstructor c) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isIgnorableField(AnnotatedField f) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Object findSerializer(Annotated am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<?> findSerializationType(Annotated a) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Typing findSerializationTyping(Annotated a) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<?>[] findSerializationViews(Annotated a) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String[] findSerializationPropertyOrder(AnnotatedClass ac) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean findSerializationSortAlphabetically(AnnotatedClass ac) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String findGettablePropertyName(AnnotatedMethod am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean hasAsValueAnnotation(AnnotatedMethod am) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String findSerializablePropertyName(AnnotatedField af) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object findDeserializer(Annotated am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<? extends KeyDeserializer> findKeyDeserializer(Annotated am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<? extends JsonDeserializer<?>> findContentDeserializer(
			Annotated am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<?> findDeserializationType(Annotated am, JavaType baseType,
			String propName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<?> findDeserializationKeyType(Annotated am,
			JavaType baseKeyType, String propName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Class<?> findDeserializationContentType(Annotated am,
			JavaType baseContentType, String propName) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String findSettablePropertyName(AnnotatedMethod am) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String findDeserializablePropertyName(AnnotatedField af) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String findPropertyNameForParam(AnnotatedParameter param) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String findEnumValue(Enum<?> arg0) {
		// TODO Auto-generated method stub
		return null;
	}
}
